在 Day 10 中有介紹到,駭客用了什麼壞壞的手段,讓木須龍造訪網頁。
因此在 Day 11 要介紹怎麼防範 XSS。
當我大學第一次知道有個叫 XSS 攻擊時,我第一個想到的解法大概像下面這個樣子
<?php
$dangerChar = array('html','link','script','body','img');//還有很多沒寫出來
$userInput = $_POST['input'];
for($i=0 ; $i<count($dangerChar); $i++){
$userInput = str_replace($dangerChar[$i],'',$userInput);
}
?>
正當我以為用 str_replace 把所有 HTML 語法都變不見,晚上可以好好睡覺的時候,在網路上看到這樣的語法,瞬間覺得是不是中了別人的圈套了
<scrscriptipt>alert("haha!so funny.")</scrscriptipt>
原本是不能執行的 HTML 經過 replace 後,直接變成可以執行的語法(|||゚д゚)
PHP 中有個 function 叫 htmlspecialchars(),它可以把< > & ' "
這些符號轉換成HTML可以顯示出來的符號,用這個方法修改一下 Day 10 的 PHP
<?php
$id = $_POST['user'];
?>
<label>我是誰?</label>
<?php
echo "我是".htmlspecialchars($id,ENT_QUOTES);
?>
加上 ENT_QUOTES ,會把單引號和雙引號都轉換成 HTML 可以顯示的符號
用這個例子再召喚一次石像神龍看看(ノ>ω<)ノ
看起來好像失敗了(´・ω・`)
不過也成功擋下 XSS 了,今晚可以安心地睡覺了(:3[___]=